home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / msoftapp.zip / CIRCLDOC.CPP < prev    next >
C/C++ Source or Header  |  1993-06-01  |  4KB  |  190 lines

  1. // circldoc.cpp : implementation of the CCircleDoc class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "circle.h"
  6. #include "circldoc.h"
  7.  
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char BASED_CODE THIS_FILE[] = __FILE__;
  11. #endif
  12.  
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CCircleDoc
  15.  
  16. IMPLEMENT_DYNCREATE(CCircleDoc, CDocument)
  17.  
  18. BEGIN_MESSAGE_MAP(CCircleDoc, CDocument)
  19.     //{{AFX_MSG_MAP(CCircleDoc)
  20.     ON_COMMAND(ID_EDIT_RED, OnEditRed)
  21.     ON_COMMAND(ID_EDIT_GREEN, OnEditGreen)
  22.     ON_COMMAND(ID_EDIT_BLUE, OnEditBlue)
  23.     ON_UPDATE_COMMAND_UI(ID_EDIT_RED, OnUpdateEditRed)
  24.     ON_UPDATE_COMMAND_UI(ID_EDIT_GREEN, OnUpdateEditGreen)
  25.     ON_UPDATE_COMMAND_UI(ID_EDIT_BLUE, OnUpdateEditBlue)
  26.     //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28.  
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CCircleDoc construction/destruction
  31.  
  32. CCircleDoc::CCircleDoc()
  33. {
  34.     // TODO: add one-time construction code here
  35. }
  36.  
  37. CCircleDoc::~CCircleDoc()
  38. {
  39. }
  40.  
  41. BOOL CCircleDoc::OnNewDocument()
  42. {
  43.     if (!CDocument::OnNewDocument())
  44.         return FALSE;
  45.     // TODO: add reinitialization code here
  46.     // (SDI documents will reuse this document)
  47.     return TRUE;
  48. }
  49.  
  50. /////////////////////////////////////////////////////////////////////////////
  51. // CCircleDoc serialization
  52.  
  53. void CCircleDoc::Serialize(CArchive& ar)
  54.     {
  55.     m_circle.Serialize(ar);
  56.     }
  57.  
  58.  
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CCircleDoc diagnostics
  61.  
  62. #ifdef _DEBUG
  63. void CCircleDoc::AssertValid() const
  64. {
  65.     CDocument::AssertValid();
  66. }
  67.  
  68. void CCircleDoc::Dump(CDumpContext& dc) const
  69. {
  70.     CDocument::Dump(dc);
  71. }
  72.  
  73. #endif //_DEBUG
  74.  
  75. /////////////////////////////////////////////////////////////////////////////
  76. // CCircleDoc commands
  77.  
  78. CCircle CCircleDoc::GetCircle (void) const
  79.     {
  80.     return m_circle ;
  81.     }  
  82.     
  83.     
  84. /////////////////////////////////////////////////////////////////////////////
  85. // CCircle stuff
  86.  
  87. IMPLEMENT_SERIAL (CCircle, CObject, 1)
  88.  
  89. CCircle::CCircle (void)
  90.     {            
  91.     m_rect.left  = m_rect.top    =   0;
  92.     m_rect.right = m_rect.bottom = 100;
  93.     m_colorref     = RGB(255,0,0);
  94.     } 
  95.     
  96. CCircle::CCircle (const CCircle &c)    
  97.     {
  98.     m_rect        = c.m_rect;
  99.     m_colorref    = c.m_colorref;
  100.     }
  101.     
  102. void CCircle::Draw(CDC *pDC)
  103.     {
  104.     pDC->SaveDC();
  105.     CBrush brush (m_colorref);
  106.     pDC->SelectObject (&brush);
  107.     pDC->Ellipse (&m_rect);
  108.     pDC->RestoreDC(-1);
  109.     } 
  110.     
  111.     
  112. void CCircle::TextOut(CDC *pDC)
  113.     {
  114.     CString strColor("blue"),
  115.             strText ("The circle's color is ");
  116.     
  117.     if (m_colorref == RGB(255,0,0))
  118.         strColor = "red";
  119.     else if (m_colorref == RGB(0,255,0))
  120.         strColor = "green"; 
  121.             
  122.     strText += strColor;
  123.     pDC->TextOut (0,0,strText) ;
  124.     }    
  125.  
  126. COLORREF CCircle::SetColor(COLORREF rgbNewColor)
  127.     {
  128.     COLORREF rgbOldColor = m_colorref;
  129.     m_colorref = rgbNewColor ;
  130.     return rgbOldColor ;
  131.     }
  132.  
  133. COLORREF CCircle::GetColor(void)
  134.     {
  135.     return m_colorref;
  136.     }
  137.     
  138. void CCircle::Serialize(CArchive& ar)
  139.     {
  140.     CObject::Serialize(ar);
  141.     
  142.     if (ar.IsStoring())
  143.         {
  144.         ar << DWORD(m_colorref) << m_rect;
  145.         }
  146.     else
  147.         {
  148.         ar >> (COLORREF)m_colorref;
  149.         ar >> m_rect;
  150.         }
  151.     }
  152.  
  153.             
  154. void CCircleDoc::OnEditRed()
  155.     {
  156.     m_circle.SetColor( RGB(255,0,0) );
  157.     SetModifiedFlag();
  158.     UpdateAllViews(NULL);
  159.     }
  160.  
  161. void CCircleDoc::OnEditGreen()
  162.     {
  163.     m_circle.SetColor( RGB(0,255,0) );
  164.     SetModifiedFlag();
  165.     UpdateAllViews(NULL);
  166.     }
  167.  
  168. void CCircleDoc::OnEditBlue()
  169.     {
  170.     m_circle.SetColor( RGB(0,0,255) );
  171.     SetModifiedFlag();
  172.     UpdateAllViews(NULL);
  173.     }
  174.  
  175. void CCircleDoc::OnUpdateEditRed(CCmdUI* pCmdUI)
  176.     {
  177.     pCmdUI->SetCheck (m_circle.GetColor() == RGB(255,0,0));    
  178.     }
  179.  
  180. void CCircleDoc::OnUpdateEditGreen(CCmdUI* pCmdUI)
  181.     {
  182.     pCmdUI->SetCheck (m_circle.GetColor() == RGB(0,255,0));
  183.     }
  184.  
  185. void CCircleDoc::OnUpdateEditBlue(CCmdUI* pCmdUI)
  186.     {
  187.     pCmdUI->SetCheck (m_circle.GetColor() == RGB(0,0,255));
  188.     }
  189.  
  190.